package num;

import java.util.Arrays;

/**
 * @author pengfei.hpf
 * @date 2020/3/31
 * @verdion 1.0.0
 * 179. 最大数
 * 给定一组非负整数，重新排列它们的顺序使之组成一个最大的整数。
 *
 * 示例 1:
 *
 * 输入: [10,2]
 * 输出: 210
 * 示例 2:
 *
 * 输入: [3,30,34,5,9]
 * 输出: 9534330
 * 说明: 输出结果可能非常大，所以你需要返回一个字符串而不是整数。
 */
public class LargestNumber {
    public String largestNumber(int[] nums) {
        if(nums == null || nums.length == 0){
            return "";
        }
        StringBuilder builder = new StringBuilder();
        Integer[] ints = new Integer[nums.length];
        for(int i = 0; i < nums.length; i ++){
            ints[i] = nums[i];
        }
        Arrays.sort(ints, this::compare);
        int i = 0;
        while(ints[i] == 0){
            i++;
        }
        while(i < ints.length){
            builder.append(ints[i++]);
        }
        //TODO: 注意前导0!!!!
        return builder.length() > 0 ? builder.toString() : "0";
    }

    private int compare(Integer o1, Integer o2){
        String s1 = o1 + "" + o2;
        String s2 = o2 + "" + o1;
        if(s1.compareTo(s2) > 0){
            return -1;
        } else {
            return 1;
        }
    }
}
